pragma Singleton
import QtQuick 2.15

QtObject {
    // 深色主题配色方案 - 现代工业风格 (优化版)
    // 遵循设计指导: 低饱和度底色，高对比度文字，聚焦式强调色

    // === 基础颜色 ===
    readonly property color primary: "#3A8DFF"        // 现代科技蓝 - 主色调 (更具活力)
    readonly property color primaryLight: "#5BA3FF"   // 浅蓝 - 主色调浅色变体
    readonly property color primaryDark: "#2563EB"    // 深蓝 - 主色调深色变体
    readonly property color accent: "#48D1CC"         // 青色 - 强调色

    // === 状态颜色 (语义化) - 降低饱和度 ===
    readonly property color success: "#36C38A"        // 柔和绿色 - 成功/正常/空闲
    readonly property color warning: "#FFB020"        // 警告橙色 - 警告/注意
    readonly property color danger: "#E74C3C"         // 红色 - 危险/错误/报警
    readonly property color info: "#3A8DFF"           // 蓝色 - 信息/执行中

    // === AGV状态颜色 ===
    readonly property color agvIdle: "#36C38A"        // 柔和绿色 - 空闲
    readonly property color agvExecuting: "#3A8DFF"   // 现代蓝色 - 执行任务
    readonly property color agvCharging: "#FFB020"    // 警告橙色 - 充电中
    readonly property color agvError: "#E74C3C"       // 红色 - 故障/错误
    readonly property color agvOffline: "#95A5A6"     // 灰色 - 离线/维护
    readonly property color agvBlocked: "#F06292"     // 粉红 - 阻挡（区别故障红与充电橙）
    readonly property color agvLocked: "#9E9E9E"      // 灰色 - 急停/锁定

    // === 背景颜色 - 中性深灰系统 ===
    readonly property color background: "#1C1E21"     // 中性深灰 - 主背景 (更现代)
    readonly property color backgroundSecondary: "#23252A"  // 略浅深灰 - 次要背景
    readonly property color backgroundAlternate: "#2A2D32" // 交替背景
    readonly property color backgroundSelected: "#2F3339"  // 选中背景
    readonly property color surface: "#27292D"        // 表面颜色 - 卡片背景 (层级区分)
    readonly property color surfaceVariant: "#2F3339" // 表面变体 - 悬停状态
    readonly property color surfaceHeader: "#2A2D32"  // 表头背景 - 略浅于卡片

    // === 文本颜色 - 柔和白色系统 ===
    readonly property color textPrimary: "#E0E0E0"    // 柔和白色 - 主要文本 (避免眼疲劳)
    readonly property color textSecondary: "#A0A4A8"  // 中性灰 - 次要文本
    readonly property color textTertiary: "#7F8C8D"   // 深灰 - 第三级文本
    readonly property color textDisabled: "#5A5F66"   // Muted grey for disabled text
    readonly property color textOnPrimary: "#FFFFFF"  // 主色调上的文本 (纯白仅用于强调)

    // === 边框和分割线 ===
    readonly property color border: "#3A3D42"         // 边框颜色 (更柔和)
    readonly property color borderLight: "#4A4D52"    // 浅边框
    readonly property color divider: "#2F3339"        // 分割线

    // === 字体大小 ===
    readonly property int fontSizeSmall: 12           // 小字体
    readonly property int fontSizeNormal: 14          // 标准字体
    readonly property int fontSizeMedium: 16          // 中等字体
    readonly property int fontSizeLarge: 18           // 大字体
    readonly property int fontSizeXLarge: 24          // 超大字体
    readonly property int fontSizeTitle: 32           // 标题字体

    // === 字体权重 ===
    readonly property int fontWeightLight: Font.Light
    readonly property int fontWeightNormal: Font.Normal
    readonly property int fontWeightMedium: Font.Medium
    readonly property int fontWeightBold: Font.Bold

    // === 间距系统 (8px倍数) ===
    readonly property int spacingXSmall: 4            // 极小间距
    readonly property int spacingSmall: 8             // 小间距
    readonly property int spacingNormal: 16           // 标准间距
    readonly property int spacingMedium: 24           // 中等间距
    readonly property int spacingLarge: 32            // 大间距
    readonly property int spacingXLarge: 48           // 超大间距

    // === 圆角半径 ===
    readonly property int radiusSmall: 4              // 小圆角
    readonly property int radiusNormal: 8             // 标准圆角
    readonly property int radiusLarge: 12             // 大圆角

    // === 阴影和高度 ===
    readonly property int elevation1: 2               // 低阴影
    readonly property int elevation2: 4               // 中阴影
    readonly property int elevation3: 8               // 高阴影

    // === 动画时长 ===
    readonly property int animationFast: 150          // 快速动画
    readonly property int animationNormal: 250        // 标准动画
    readonly property int animationSlow: 400          // 慢动画

    // === 布局尺寸 ===
    readonly property int topBarHeight: 50            // 顶部状态栏高度
    readonly property int sideBarWidth: 80            // 侧边导航栏宽度
    readonly property int sideBarWidthExpanded: 140   // 展开的侧边栏宽度
    readonly property int statusBarHeight: 30         // 底部状态栏高度

    // === KPI卡片尺寸 ===
    readonly property int kpiCardWidth: 180           // KPI卡片宽度
    readonly property int kpiCardHeight: 120          // KPI卡片高度

    // === 按钮尺寸 ===
    readonly property int buttonHeightSmall: 32       // 小按钮高度
    readonly property int buttonHeightNormal: 40      // 标准按钮高度
    readonly property int buttonHeightLarge: 48       // 大按钮高度

    // === AGV图标尺寸 ===
    readonly property int agvIconSize: 24             // AGV图标大小
    readonly property int agvIconSizeLarge: 32        // 大AGV图标

    // === 工具方法 ===

    /**
     * 根据AGV状态获取对应颜色
     * @param status AGV状态字符串
     * @return 对应的颜色
     */
    function getAgvStatusColor(status) {
        switch(status) {
            case "idle":
            case "空闲":
                return agvIdle;
            case "executing":
            case "执行中":
                return agvExecuting;
            case "charging":
            case "充电中":
                return agvCharging;
            case "error":
            case "故障":
                return agvError;
            case "offline":
            case "离线":
            case "maintenance":
            case "维护":
                return agvOffline;
            default:
                return textSecondary;
        }
    }

    /**
     * 根据任务状态获取对应颜色
     * @param status 任务状态字符串
     * @return 对应的颜色
     */
    function getTaskStatusColor(status) {
        switch(status) {
            case "completed":
            case "已完成":
                return success;
            case "executing":
            case "执行中":
                return info;
            case "pending":
            case "待处理":
                return warning;
            case "failed":
            case "失败":
            case "cancelled":
            case "已取消":
                return danger;
            default:
                return textSecondary;
        }
    }

    /**
     * 根据优先级获取对应颜色
     * @param priority 优先级数值或字符串
     * @return 对应的颜色
     */
    function getPriorityColor(priority) {
        if (typeof priority === 'string') {
            switch(priority.toLowerCase()) {
                case "high":
                case "高":
                    return danger;
                case "medium":
                case "中":
                    return warning;
                case "low":
                case "低":
                    return success;
                default:
                    return textSecondary;
            }
        } else if (typeof priority === 'number') {
            if (priority >= 80) return danger;
            if (priority >= 50) return warning;
            if (priority >= 20) return success;
            return textSecondary;
        }
        return textSecondary;
    }
}
